#ifndef __ENCODER_TIM_H__
#define __ENCODER_TIM_H__
#include <stdint.h>


#define INPUT_ON  0
#define INPUT_OFF 1
#define InputStatus(gpiox,pin) GPIO_ReadInputDataBit(gpiox,pin)

#define KeyDetectStatus        GPIO_ReadInputDataBit(Key_Detect_Port, Key_Detect_Pin)
#define KeyLimitStatus         GPIO_ReadInputDataBit(Key_Limit_Port , Key_Limit_Pin)

//输入捕获定义
#define CAPTURE_TIM          TIM2
#define CAPTURE_TIM_RCC      RCC_APB1Periph_TIM2
#define CAPTURE_TIM_GPIO_RCC RCC_APB2Periph_GPIOA
#define CAPTURE_TIM_GPIO     GPIOA
#define CAPTURE_NVIC_CH      TIM2_IRQn
#define CAPTURE_PIN_A        GPIO_Pin_0
#define CAPTURE_PIN_B        GPIO_Pin_1
#define CAPTURE_CNT          CAPTURE_TIM->CNT
#define OVERFLOW_COUNT       60000


typedef enum {
	ENCODE_TIM1_CH1,
	ENCODE_TIM1_CH2,
	ENCODE_TIM1_CH3,
	ENCODE_TIM1_CH4,
	ENCODE_TIM2_CH1,
	ENCODE_TIM2_CH2,
	ENCODE_TIM2_CH3,
	ENCODE_TIM2_CH4,
	ENCODE_TIM3_CH1,
	ENCODE_TIM3_CH2,
	ENCODE_TIM3_CH3,
	ENCODE_TIM3_CH4,
	ENCODE_TIM4_CH1,
	ENCODE_TIM4_CH2,
	ENCODE_TIM4_CH3,
	ENCODE_TIM4_CH4,
	ENCODE_TIM5_CH1,
	ENCODE_TIM5_CH2,
	ENCODE_TIM5_CH3,
	ENCODE_TIM5_CH4,
} ENCODE_TIM_CHN_E;

typedef enum {
	ENCODE_TIM1,
	ENCODE_TIM2,
	ENCODE_TIM3,
	ENCODE_TIM4,
	ENCODE_TIM5,
    ENCODE_TIM1_PARTIAL,
	ENCODE_TIM2_PARTIAL,
	ENCODE_TIM3_PARTIAL,
    ENCODE_TIM1_FULL,
	ENCODE_TIM2_FULL,
	ENCODE_TIM3_FULL,
	ENCODE_TIM4_FULL,
} ENCODE_TIM_E;

typedef enum {
	ENCODE_CH1,
	ENCODE_CH2,
	ENCODE_CH3,
	ENCODE_CH4,
} ENCODE_CHN_E;


void TIM1_EncodeIrq(void);
void TIM2_EncodeIrq(void);
void TIM3_EncodeIrq(void);
void TIM4_EncodeIrq(void);
void TIM5_EncodeIrq(void);
void TimEncodeInit(ENCODE_TIM_E tim_chn);
int TimEncodeGet(ENCODE_TIM_E tim);

#endif 
